package java6681.oursplit;

import java.util.ArrayList;


public class OurSplit6681 {
    private char separator;

    public OurSplit6681() {
        separator = ',';
    }

    public OurSplit6681(char separator) {
        this.separator = separator;
    }

    public char getSeparator() {
        return separator;
    }

    public void setSeparator(char separator) {
        this.separator = separator;
    }

    public String[] split(String source) {
        StringBuilder sBuilder = new StringBuilder();
//        剔除无效分隔符，并且计算有效的分隔符个数
        int n = cleanSeparator(source,sBuilder);
        String[] words = new String[n+1];//n个分隔符、n+1个元素
        if (n==0){
            words[0]=source;
        }else{
            //拆分并填充数组
            fill(sBuilder,words);
        }
        return words;

    }
    private int cleanSeparator(String source,StringBuilder stringBuilder){
//       要得到两个结果
//        （1）分割字符的个数，作为方法的返回值
//        （2）处理后的字符串通过引用类型的形参stringBuilder返回
        if (source == null || source.length()==0||source.indexOf(separator)==-1){
            return 0;
        }
        //上一个符号，用于识别连续的字符
//        初值为分隔符，其目的是剔除前导的分隔符
        char lastChar = separator;
//        但当前符号
//        为了保证最后的if语句可以正常运行，初值设为非separator字符
        char currentChar = (char)(separator+1);
        int n = 0;//有效分隔符个数
//        扫描字符串，清除连续分隔符
        for (int i = 0; i < source.length() ; i++) {
            currentChar = source.charAt(i);
            if (currentChar== lastChar&&lastChar==separator){
//          如果是连续的分隔符，则被剔除
            }else{
//           有效字符，添加导新的字符串中
                stringBuilder.append(currentChar);
                lastChar = currentChar;
                if (currentChar== separator){
//                    统计分隔符的个数
                    n++;
                }
            }
        }
//        如果最后一个字符是分隔符，视为无效
        if (currentChar==separator){
            stringBuilder.deleteCharAt(stringBuilder.length()-1);
//            stringBuilder.delete(stringBuilder.length()-1,stringBuilder.length());
            n--;
        }
        return n;
    }
    private void fill(StringBuilder stringBuilder,String[] results){
        int pos;
        int start = 0;
        int i = 0;
        while ((pos = stringBuilder.indexOf(separator+"",start))>-1){
            results[i++] = stringBuilder.substring(start,pos);
            start=pos+1;//下一次查找的起始位置
        }
//        补上最后一个
        results[i] = stringBuilder.substring(start);

    }
}
